CloudFront

CloudFront AWS'in CDN(Content Delivery Network) hizmetidir. Dinamik veya statik içerikli web sitelerine daha hızlı erişebilmek için Dünya'nın değişik bölgelerinde bulunan Edge Location denilen bölgelerde içeriğin ön belleklenmesidir. AWS tarafında S3 ve EC2 veya on premises sistemleriniz için kullanılabilir. En önemli özelliklerinden birisi de güvenliktir. Veri kaynaktan uç noktalara hareketi TLS ile veya kendi sertifikanızla şifrelenerek olmaktadır. Ayrıca AWS shield sayesinde default olarak DDOS saldırılarına karşı korumalıdır.
AWS bu hizmeti sayısı 275'in üzerinde olan fiziksel server'ları sayesinde yapmaktadır. Bunların 13 tanesi Regional Edge Caches'dir. Diğer Edge Locationlardan daha büyüktür. 47 ülkede 90'dan fazla şehirde dağılmıştır.

CloudFront Nasıl Çalışır?

Normal durumda son kullanıcının yaptığı istek sonrası her defasında içerik kaynaktan(S3 veya HTTP server) gelir. Bu da gereksiz trafik, içeriğin zarar görme ihtimali ve gecikmeye sebep olmaktadır. Bu sebeple kullanıcını ilk isteği sonrası içerik önce Edge Location'da ön belleklenir. O bölgedeki tüm kullanıcıların artık sonraki tüm istekleri kendilerine en yakın olan Edge Location'dan karşılanır.
Bu hizmete AWS konsol, CLI, SDK, API vasıtası ile ulaşılabilir.
Ücretlendirme

Ücretlendirme iki kalem olarak gerçekleşir. Birincisi GB başına transfer edilen data ikincisi ise yapılan istek sayısıdır.


Free Tier kapsamında her ay için transfer olarak 50 GB ve istek olarak da 2 milyona kadar ücretsizdir. Transfer ücretleri ülkelere göre değişmektedir. Amerika kıtasında kullanım ucuzken Hindistan da pahalıdır. Ayrıca güvenlik anlamında Shield kullanılması durumunda da istek başına ilave ücret ödenmektedir.

Lambda@edge fiyatlandırması ise 3 kalemde olur. Birincisi 1 milyon çağrı başına 0.6$, ikincisi kodun yürütülmesi süresince GB/saniye olarak 0.00005$, son olarak işlevin çağrı başına her 128 MB/sn için 0.000006$ olur
Ayrıca önceden en az ayda 10 TB veri kullanımı taahhüdü verilmesi durumunda indirimli fiyat uygulanır.
Onun haricinde son olarak fiyat sınıfları vardır. 3'e ayrılır. 100, 200 ve tüm fiyat sınıfları şeklinde. 100 en düşüktür ve bu hizmet avrupa-amerika gibi kısıtlı alanda kullanılır.


CloudFront Kaynak Olarak Neler Kullanılabilir?
1- S3 Bucket : Bucket içindeki verilerinize ulaşmak isteyenler edge locationlardan hızlıca erişebilir. OAI(Origin Accsess Identity) sayesinde daha güvenli hale getirebiliriz. Uygulamda nasıl kullanıldığını anlatacağım. S3'e dosya yüklenmesi için de CloudFront kullanılabilir.
2- Custom Origin(HTTP) : EC2, Aplication Load Balancer veya S3 website kaynak olarak belirtilebilir. Ayrıca on-premise'de bulunan HTTP kaynaklarımızı da kullanabiliriz.

Eğer kaynak EC2 ise, EC2 mutlaka public subnet'te olmalı. Fakat ALB kullanılacaksa EC2'lar private'da olabilir. Çünkü bu durumda ALB public'de olma zorunda olacak.

Geo Restriction
İçeriğinize bazı ülkelerin erişebilmesini veya erişememesini Blocklist ve allowlist seçenekleriyle belirleyebileceğiz. Ülkeler belirlenirken 3. parti Geo-IP kullanılır. Uygulamada bu konuya bakacağız.
CloudFront ve S3 Cross Region Replication Farkı
CloudFront'da tüm edge locationlarda cache'leme lurken S3 replika'da sizin seçtiğiniz regionlarda olur. CloudFront'da TTL değeri boyunca değer değişmez ve bu değer 1 gün dahi olabilir. S3 replika'da gerçek zamana yakın güncelleme olur. CloudFront statik içerikler için uygunken S3 replika düşük gecikme sebebiyle dinamik içerikler için daha uygundur.
Şimdi S3 üzerinden bir uygulama yapacağız yaparken menüyü de kurcalayacağız.
S3 bucket'ı web sitesi host için ayarlayalım. Farklı olarak public accsess kapalı olsun ve policy kısmı boş kalsın. İçerisine index.html dosyası atalım varsa bağlantılı fotoğrafları da atabilirsiniz. denemek için url'ini kopyalayıp açmaya çalıştığınızda açamadığımızı görelim. Public'e açmadık. Yukarıda bahsettiğimiz OAI(Origin Accsess Identity) ile sadece edge location lara açılış otomatik olacak.
CloudFront servisine gelelim. Create a CloudFront Distribution' a basarak ilk dağıtımımızı oluşturmaya başlayalım. Origin, Default cache behavior, Function associations, Settings bölümlerinden oluşmaktadır.

Öncelikle sağ üst kısma bakarsanız bu servisin global bir servis olduğunu region bağımsız olduğunu görebiliriz.
Origin Domain : Bu bölümde iki seçeneğimiz var ya custom olarak web sitesi URL'si şeklinde gireceğiz veya AWS'in servisleri olan S3, Load Balance, mediastore, mediapackage olarak seçebiliriz. Ben S3 seçtim ve bu konu için oluşturduğum demo-cloudfront-samet bucket'ı seçtim. Alt bölümde setting kısmında default root object kısmına /index.html olarak gireceğiz. Bu sayede siteye ulaşmak istediğimizde CloudFront URL ile girmiş olacağız. Diğer türlü ulaşmak isteğimizde CloudFront URL/index.html şeklinde girmemiz gerekecekti. Bizim örneğimiz custom değil S3 bucket üzerinden devam edecek. Bunun yerine S3 bucket public access'i açıp hosting enable yaptıktan sonra Hosting URL'i ile custom olarak da yapabilirdik. Arada küçük farklılıklar var.
S3 bucket access : Bu bölüm S3'e özeldir. Yes use OAI seçtiğimizde sadece CloudFront erişebilecek. Origin access identity burada Create new OAI seçelim ve açılan sayfada create diyelim. Bucket policy kısmında yes seçtiğimizde bucket policy'i kendisi oluşturacak bittiğinde S3 sayfasında kontrol edebilirsiniz.

Enable Origin Shield : Bu özellik yes seçilirse ek bir ön bellekleme yaparak yükü azaltmaya yardımcı olur ve extra güvenlik oluşturur. İlave ücreti vardır pricing bölümünden kontrol edebilirsiniz.
Additional settings: Bu ayarlarda cloudfront origin ile kaç defa bağlantı denemesi yapacak ve zaman aşımı süresi ne olacak bu değerleri giriyoruz. Altta 2 tane aktif olmayan seçenek var. Response timeout ve Keep-alive timeout bu seçenekler orgin custom seçilirse aktif olacak.

Path pattern: * seçildiği için içerisindeki herşey anlamına gelir. Siz bir path belirtip sadece belli dosyaların önbelleklenmesini isteyebilirsiniz.
Compress objects automatically: Daha az yer kaplaması için otomatik sıkıştırma uygulansın mı?
Viewer protocol policy: Hangi protokol'ler kullanılsın. Hem HTTP hem de HTTPs, sadece HTTPs veya HTTP gelen istekleri HTTPs'e çevir seçenekleri
Allowed HTTP methods: HTTP methodlarının hangileri kullanılabilsin. Sadece okuma yapılcaksa ilk seçenek yeterli olacaktır.
Restrict viewer access: Erişimi belirli key gruplarına karşı engelleyebilirsiniz. Ücretli uygulamanız var belirli kullanıcılar ulaşsın dediğinizde kullanıyoruz.
Field-level encryption: Bu bölüm resimde gözükmüyor. Bu özellik sayesinde kredi kartı bilgileri gibi özel bilgiler edge location ile origin'deki server arasında şifrelenmiş olarak gider. Aşağıdaki resimden inceleyebilirsiniz.

Bu bölümün altında Function associations kısmı var. Burada dışarıdan gelen veya kaynaktan gelen istek ve cevaplarda önceden hazırlanmış cloudfront function veya lambda@edge tanımlanabilir. Cloudfrond function edge location için lambda@edge ise region caches da çalışır. Function hazırlanması left-hand-menü'de function bölümünden yapılıyor.

Price class : Yukarıda bahsetmiştim 100, 200 ve tüm edge locationlar şeklinde 3'e ayrılıyor. Fiyatı düşürmek için belirli bölgelerle kısıtlama yapabilirsiniz.
Amazon WAF web ACL: Güvenliği artırmak için AWS WAF servisi ile ilişilendirebiliriz.
Alternate domain name (CNAME): Bu özellik sayesinde kendi domain name'inizi kullanarak sitenize ulaşabilirsiniz. Normalde Cloudfront'un size verdiği URL ile girmeniz gerekirken artık kendi domain adresiniz ile girebilirsiniz.
Custom SSL certificate: Kendi sertifikanızı seçebilirsiniz. HTTPs'i kullanabilmek için SSL/TSL sertifikası gerekiyor. Eğer sertifikanız yoksa AWS Certificate Manager ile oluşturabilirsiniz. Kendi domain name'iniz olması koşuluyla ücretsiz oluşturabilirsiniz.
Default root object: Yapılan isteklerde hangi sayfa yönlendirilecek default buradan belirleyebilirsiniz. Bizde index.html olacak
Standard logging: İsteklerin logları S3 bucket'a aktarılsın mı? Açılırsa bucket seçmeniz gerekecek ve isterseniz prefix verebiliyorsunuz. Ayrıca cookie'lerin de log'larını alabiliyoruz.
IPv6: IPv6 desteklensin mi?
Create dediğimizde Distributions oluşması bir süre alacak. Önce deploying olarak görülecek daha sonra in progress olarak göreceğiz.

Domain Name ile ulaşılabilir olacak. Buradaki URL ile ulaştığınızda isteğinize cevap direk origin'den olmaz önce edge location'a daha sonra size gelir. Sonraki tüm istekler artık edge location'dan karşılanır.
Bucket policy'e baktığımızda public accsess ve policy kısmını aşağıdaki gibi göreceğiz.


Multiple Origin
Bu özelliği aktif edebilmek için oluşturduğunuz distribution'a tıklayın. Origin menüsünden create origin ile yeni bir kaynak seçin. Aşağıdaki resimde ikinci kaynağı ekledim o da S3 bucket.

Daha sonra behaviors menüsüne gelerek create behavior seçip yeni bir path ile yeni origin'i seçin.


Origin Groups
Bu özellik sayesinde eklediğimiz ikinci origin'i secondary olarak seçebiliyoruz. Primary origin'e istek ulaşamaz ise secondary origin cevap üretecek.

Öncelikle Create origin grup diyoruz. Primary ve secondary orginleri yukarıdaki gibi ayarladıktan sonra hangi hatalarda secondary'e yönlendirilsin diye hata kodlarını seçiyoruz bir isim verip oluşturuyoruz.

Geographic restrictions
Sitenizin içeriğine belirli ülkeler erişebilsin veya belirli ülkeler erişemesin seçimi yaptığımız menü.

Edit deyip girdiğimizde ;

Allow veya Block seçeneğini seçtikten sonra Countries kısmından istediğiniz bir veya birden fazla ülkeyi seçebilirsiniz.
Invalidations
Default TTL değeri 1 gündür. Yani siz içerik değişikliği yaparsanız değişikliğin edge locationlarda update olması için beklemeniz gerekmektedir. Invalidation menüsü sayesinde belirli dosyaları veya tamamını değiştirirseniz kısa süre içerisinde update olmuş olacak.

Aşağıdaki gibi /* seçtiğimizde tüm değişiklikleri update edecek.

Bu servisi de burada bitiriyoruz.
KALIN SAĞLICAKLA.....